
package com.hsnn.medstgmini.base.dict.service.impl;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import javax.annotation.Resource;

import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.hsnn.medstgmini.base.dict.dao.DicDrugformLogDao;
import com.hsnn.medstgmini.base.dict.model.DicDrugform;
import com.hsnn.medstgmini.base.dict.model.DicDrugformLog;
import com.hsnn.medstgmini.base.dict.model.form.DicDrugformtoLog;
import com.hsnn.medstgmini.base.dict.service.DicDrugformLogManager;
import com.hsnn.medstgmini.sys.dao.SysUserDao;
import com.hsnn.medstgmini.sys.model.SysUser;
import com.hsnn.medstgmini.util.FormatDate;
import com.hsnn.medstgmini.util.Pagination;
import com.hsnn.medstgmini.util.ParseDate;


/**
 * 基础库 数据字典 剂型字典 维护记录接口实现类SERVICE
 * @author hss@njhsnn
 * 2015年6月9日
 */
@Service()
public class DicDrugformLogManagerImpl  implements DicDrugformLogManager {
	@Autowired
	private DicDrugformLogDao dicDrugformLogDao;
	@Autowired
	private SysUserDao sysUserdao;
	
	 @Autowired
	    public void setDicDrugformLogDao(DicDrugformLogDao dicDrugformLogDao) {
	        this.dicDrugformLogDao = dicDrugformLogDao;
	    }
	 
		/**
		 *  基础库 数据字典 剂型字典 维护记录添加
		 * @param dicDrugformLog
		 */
	@Transactional
	@Override
	public boolean add(DicDrugformLog dicDrugformLog) {
	 return this.dicDrugformLogDao.add(dicDrugformLog);
	}

	/**
	 * 基础库 数据字典 剂型字典 维护记录查询所有及条件查询
	 * @param dicDrugformLog
	 * @return
	 */
	@Transactional
	@Override
	public List<DicDrugformLog> queryDicDrugformLogByName(
			Pagination page,DicDrugformLog dicDrugformLog) {
		return  dicDrugformLogDao.queryDicDrugformLogByName(page,dicDrugformLog);
	}
	
	
	/**
	 * 获取维护记录
	 */
	@Resource(name = "sessionFactory")
	private SessionFactory sessionFactory;
	@SuppressWarnings("unchecked")
	public Pagination getAllHis(Pagination page) {
		page = dicDrugformLogDao.getAllHis(page);
		page.setRows(this.formatDic((List<DicDrugformLog>)page.getRows()));
		return page;
	}
	private List<DicDrugformtoLog> formatDic(List<DicDrugformLog> list){
    	if (null != list && list.size() >0){
    		List<DicDrugformtoLog> flist = new ArrayList<DicDrugformtoLog>();
    		for (int i = 0; i < list.size(); i ++){
    			flist.add(formartForm(list.get(i)));
    		}
    		return flist;
    	}
    	return null;
    }

	private DicDrugformtoLog formartForm(DicDrugformLog data){
		if (null == data){
			return null;
		}
		DicDrugformtoLog form = new DicDrugformtoLog();
		form.setLogId(data.getLogId());
		form.setFormId(data.getFormId());
		form.setFormName(data.getFormName());
		form.setDetail(data.getDetail());
		form.setFatherDrugformCode(data.getFatherFormCode());
		form.setFatherDrugformName(data.getFatherFormName());
		if (null != data.getFatherId()){
			form.setFatherDrugformCode(data.getFormId());
			form.setFatherDrugformName(data.getFormName());
		}
		
		form.setSortId(data.getSortId());
		form.setStatus(data.getStatus());
		SysUser user = sysUserdao.getUserById(data.getUpdUser());
		if (null != user){
			form.setUpdUser(user.getName());
		}
		form.setLiterUpdDttm(data.getUpdDatetime()==null?"":FormatDate.toFullFormat(data.getUpdDatetime()));
		return form;
	}
	
	
	@Override
	public Pagination queryDicDrugformLogList(Pagination page){
		page= dicDrugformLogDao.queryDicDrugformLogList(page);
		@SuppressWarnings("unchecked")
		List<Object> list=(List<Object>) page.getRows();
		List<DicDrugformLog> data = new ArrayList<DicDrugformLog>();
		if(list.size()>0){
			for(int i=0;i<list.size();i++){
				Object[] obj=(Object[]) list.get(i);
				DicDrugformLog dsl = new DicDrugformLog();
				DicDrugform ds = new DicDrugform();
				ds.setFormCode(obj[0]==null?"":obj[0].toString());
				ds.setFormName(obj[1]==null?"":obj[1].toString());
				dsl.setDicDrugformCode(ds);
				dsl.setFormCode(obj[2]==null?"":obj[2].toString());
				dsl.setFormName(obj[3]==null?"":obj[3].toString());
				dsl.setDetail(obj[4]==null?"":obj[4].toString());
				dsl.setStatus(Integer.parseInt(obj[5].toString()));
				dsl.setUpdUser(obj[6]==null?"":obj[6].toString());
				dsl.setUpdDatetime(ParseDate.fromFullFormat(obj[7].toString()));
				dsl.setLogId(obj[8]==null?"":obj[8].toString());
				data.add(dsl);
			}
		}
		page.setRows(data);
		return page;
	}

	


	
	
	@Override
	public List<Map<String, Object>> getDicDrugformLogDetail(Pagination page) {
		return dicDrugformLogDao.getDicDrugformLogDetail(page);
	}
	
	
	
}
